package messages;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import db.DBManager;
import debug.Dbg;

public class RegistServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//	リクエスト情報の文字エンコーディングを指定
		req.setCharacterEncoding("UTF-8");
		//	パラメータを表示（デバッグ）
		Dbg.print(req);
		//	文字列定数
//	User-Agent追加		2014.01.22
//	RemoteAddr追加	2014.01.22
//		final String INSERT_SQL = "insert into messages (account, message) values (?, ?)";
		final String INSERT_SQL = 
				"insert into messages (account, password, message, user_agent, remote_addr) "
				+ "values (?, ?, ?, ?, ?)";
		//	パラメータを取得
		String account = req.getParameter("account");				//	名前
		String password = req.getParameter("password");			//	パスワード
		String message = req.getParameter("message");			//	メッセージ
		String user_agent = req.getHeader("user-agent");			//	クライアントの種類
		String remote_addr = req.getRemoteAddr();					//	IPアドレス
		
		StringBuffer msg = new StringBuffer();							//	エラーメッセージを空で準備
		//	パラメータをチェックする
		if (account == null || account.length() == 0) {
			msg.append("名前を入力してください<br />");
		}
		if (password == null || password.length() == 0) {
			msg.append("パスワードを入力してください<br />");
		}
		if (message == null || message.length() == 0) {
			msg.append("メッセージを入力してください<br />");
		}
		//	パラメータが正常な場合、データベースに登録する
		if (msg.length() == 0) {
			try {
				Connection con = DBManager.getConnection();		//	DB接続
																							//	SQL準備
				PreparedStatement ps = con.prepareStatement(INSERT_SQL);
				ps.setString(1, account);
				ps.setString(2, password);
				ps.setString(3, message);
				ps.setString(4,  user_agent);
				ps.setString(5,  remote_addr);
				ps.executeUpdate();												//	データを登録する

				ps.close();																//	後処理
				con.close();
			}
			catch (SQLException e) {
				e.printStackTrace();
				msg.append("データベース関連の例外が発生しました");
			}
		}
		//	入力漏れなどの場合、入力画面へ遷移する
		if (msg.length() > 0) {
			req.setAttribute("msg", msg.toString());

			RequestDispatcher d =
					req.getRequestDispatcher("entry.jsp");
			d.forward(req, resp);
		}
		//	正常に登録できた場合、一覧画面へ遷移する
		else {
			resp.sendRedirect("ListServlet");
		}
	}
}
